package main;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Random;
import java.util.Vector;


import modelo.Consumo;
import modelo.LineaView;
import modelo.Plan;
import modelo.Servicio;
import modelo.UsuarioView;

import controlador.TelefoniaMovil;

public class MainTelefoniaMovil {

	private TelefoniaMovil tm;

	public MainTelefoniaMovil() {
		tm = new TelefoniaMovil();
	}

	public boolean mostrarMenu() {

		
		System.out.println("|===============================================|");
		System.out.println("|                MENU DE OPCIONES               |");
		System.out.println("|===============================================|");
		System.out.println("| USUARIO                                       |");
		System.out.println("|    1-Alta        2-Baja       3-Modificacion  |");
		System.out.println("|-----------------------------------------------|");
		System.out.println("| LINEA  PRINCIPAL                              |");
		System.out.println("|    4-Alta        5-Baja       6-Modificacion  |");
		System.out.println("|-----------------------------------------------|");
		System.out.println("| LINEA  ADICIONAL                              |");
		System.out.println("|    7-Alta        8-Baja       9-Modificacion  |");
		System.out.println("|-----------------------------------------------|");
		System.out.println("| PLAN                                          |");
		System.out.println("|   10-Alta       11-Baja      12-Modificacion  |");
		System.out.println("|-----------------------------------------------|");
		System.out.println("| SERVICIO                                      |");
		System.out.println("|   13-Alta       14-Baja      15-Modificacion  |");
		System.out.println("|-----------------------------------------------|");
		System.out.println("|   16-Simular Entradas    17-Simular Consumo   |");
		System.out.println("|-----------------------------------------------|");
		System.out.println("|       18-Facturar            0-Salir          |");
		System.out.println("-------------------------------------------------");
		System.out.print("Opcion:");
		
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				System.in));
		try {
			int s = Integer.parseInt(reader.readLine());
			
			switch (s) {
			case 0 : return false;
			case 1:
				this.crearUsuario();
				break;
			case 2:
				this.modificarUsuario();
				break;
			case 3:
				this.borrarUsuario();
				break;
			case 4:
				this.crearLineaPrincipal();
				break;
			/*case 5:
				this.bajaLineaPrincipal();
				break;*/
			case 6:
				this.modificarLineaPrincipal();
				break;
			case 7:
				this.agregarLineaAdicional();
				break;
			// case 8 : ;
			// case '9' : ;
			// case '10' : ;
			// case '11' : ;
			// case '12' : ;
			// case '13' : ;
			// case '14' : ;
			// case '15' : ;
			case 16: 
				this.simularEntradas();
				break;
			case 17:
				this.simularConsumo();  
				break;
			
			//
			}
		} catch (Exception e) {
			System.out.println(e);
		}
		
		return true;

	}
	
	private void modificarLineaPrincipal() {

		System.out.println("MODIFICAR LINEA PRINCIPAL");
		System.out.println("-------------------------------------------------");

		Vector<LineaView> lv = tm.obtenerLineaPincipal();

		if (lv.size() == 0) {
			System.out.println("No existen Usuario");
		} else {

			System.out.println("LISTADO DE USUARIOS");
			for (int i = 0; i < lv.size(); i++) {
				System.out.println("Numero:" + lv.elementAt(i).getNumero());
				System.out.println("Apellido:"
						+ lv.elementAt(i).getUsuario().getApellido());
				System.out
						.println("-------------------------------------------------");
			}

			// Modificar Linea Principal (Plan)

		}
		mostrarMenu();
	}

	private void crearLineaPrincipal() {
		try {
			// TODO falta hacer el obtenerPlan para listarlos

			BufferedReader reader = new BufferedReader(new InputStreamReader(
					System.in));

			Vector<UsuarioView> uv = tm.obtenerUsuario();

			if (uv.size() == 0) {
				System.out.println("No existen Usuario");
			} else {

				System.out.println("LISTADO DE USUARIOS");
				for (int i = 0; i < uv.size(); i++) {
					System.out.println("Dni:" + uv.elementAt(i).getDni());
					System.out.println("Nombre:" + uv.elementAt(i).getNombre());
					System.out.println("Apellido:"
							+ uv.elementAt(i).getApellido());
					System.out
							.println("----------------------------------------");
				}

				System.out.println("CREAR LINEA PRINCIPAL");
				System.out.println("----------------------");
				System.out.println("Ingrese Dni del Usuario:");
				int dni = Integer.parseInt(reader.readLine());

				if (tm.existeUsuario(dni)) {
					System.out.println("Ingrese Plan:");
					int nroPlan = Integer.parseInt(reader.readLine());

					if (tm.existePlan(nroPlan)) {
						int numero = tm.crearLineaPrincipal(dni, nroPlan);
						if (numero == 0) {
							System.out
									.println("No se pudo Crear la linea Principal al usuario con dni "
											+ dni);
						} else {
							System.out.println("El Numero asignado es "
									+ numero);
						}
					} else
						System.out.println("No existe el plan solicitado");

				} else {
					System.out.println("No existe el usuario");
				}

			}

			mostrarMenu();
		} catch (Exception e) {
		}

	}

	private void agregarLineaAdicional() {

		try {

			Vector<UsuarioView> uv = tm.obtenerUsuario();

			if (uv.size() == 0) {
				System.out.println("No existen Usuario");
			} else {
				BufferedReader reader = new BufferedReader(
						new InputStreamReader(System.in));
				System.out.println("AGREGAR LINEA ADICIONAL");
				System.out.println("---------------");
				System.out.println("Ingrese Dni del Usuario:");
				int dni = Integer.parseInt(reader.readLine());

				if (tm.existeUsuario(dni)) {
					System.out.println("Ingrese Nombre del Adicional:");
					String nombreAdicional = reader.readLine();

					// TODO nroPLan 2 (Adicional) TEST
					int numero = tm
							.crearLineaAdicional(dni, nombreAdicional, 2);
					if (numero == 0) {
						System.out
								.println("No se pudo Crear la linea Adicional al usuario con dni "
										+ dni);
					} else {
						System.out.println("El Numero asignado es " + numero);
					}

				} else {
					System.out.println("No existe el usuario");
				}

			}

			mostrarMenu();
		} catch (Exception e) {
		}

	}

	private void modificarUsuario() {

		try {

			Vector<UsuarioView> uv = tm.obtenerUsuario();

			if (uv.size() == 0) {
				System.out.println("No existen Usuario");
			} else {

				System.out.println("LISTADO DE USUARIOS");
				for (int i = 0; i < uv.size(); i++) {
					System.out.println("Dni:" + uv.elementAt(i).getDni());
					System.out.println("Nombre:" + uv.elementAt(i).getNombre());
					System.out.println("Apellido:"
							+ uv.elementAt(i).getApellido());
					System.out
							.println("----------------------------------------");

				}

				BufferedReader reader = new BufferedReader(
						new InputStreamReader(System.in));
				System.out.println(">>MODIFICAR USUARIO");
				System.out.println("---------------");
				System.out.println("Ingrese Dni:");
				int dni = Integer.parseInt(reader.readLine());

				if (tm.existeUsuario(dni)) {
					System.out.println("Ingrese Nombre:");
					String nombre = reader.readLine();
					System.out.println("Ingrese Apellido:");
					String apellido = reader.readLine();
					System.out.println("Ingrese Domiclio:");
					String domicilio = reader.readLine();
					System.out.println("Ingrese Telefono:");
					int telefono = Integer.parseInt(reader.readLine());

					boolean mu = tm.modificarUsuario(dni, nombre, apellido,
							domicilio, telefono);

					if (mu == true) {
						System.out.println("Se modifico el usuario");
					} else {
						System.out.println("No se pudo modificar el usuario");
					}

				} else {
					System.out.println("No existe el usuario a modificar");
				}

			}

			mostrarMenu();
		} catch (Exception e) {
		}
	}

	public void borrarUsuario() {
		try {

			Vector<UsuarioView> uv = tm.obtenerUsuario();

			if (uv.size() < 0) {
				System.out.println("No existen Usuario");
			} else {

				System.out.println("LISTADO DE USUARIOS");
				for (int i = 0; i < uv.size(); i++) {
					System.out.println("Dni:" + uv.elementAt(i).getDni());
					System.out.println("Nombre:" + uv.elementAt(i).getNombre());
					System.out.println("Apellido:"
							+ uv.elementAt(i).getApellido());
					System.out
							.println("----------------------------------------");

				}

				BufferedReader reader = new BufferedReader(
						new InputStreamReader(System.in));
				System.out.println(">>BORRAR USUARIO");
				System.out.println("---------------");
				System.out.println("Ingrese Dni:");
				int dni = Integer.parseInt(reader.readLine());

				if (tm.existeUsuario(dni)) {

					boolean bu = tm.borrarUsuario(dni);

					if (bu == true) {
						System.out.println("Se borro el usuario");
					} else
						System.out.println("No se pudo borrar el usuario");

				} else
					System.out.println("No existe el usuario a modificar");
			}

			mostrarMenu();
		} catch (Exception e) {
		}
	}

	public void salir() {
		System.exit(0);
	}

	public void crearUsuario() {

		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					System.in));
			System.out.println("CREAR USUARIO");
			System.out.println("---------------");
			System.out.println("Ingrese Nombre:");
			String nombre = reader.readLine();
			System.out.println("Ingrese Apellido:");
			String apellido = reader.readLine();
			System.out.println("Ingrese Dni:");
			int dni = Integer.parseInt(reader.readLine());
			System.out.println("Ingrese Domiclio:");
			String domicilio = reader.readLine();
			System.out.println("Ingrese Telefono:");
			int telefono = Integer.parseInt(reader.readLine());

			// TODO ver el tema de datos obligatorios y validacion
			boolean cu = tm.crearUsuario(dni, nombre, apellido, domicilio,
					telefono);

			if (cu == true) {
				System.out.println("Se creo satisfactoriamente el Usuario");
			} else
				System.out.println("Se produjo un error al crear el Usuario");

			mostrarMenu();
		} catch (Exception e) {
		}
	}

	public void simularEntradas(){
		System.out.print("Simulando entradas... ");
		tm.simularConsumo();
		System.out.println("Hecho!");
	}
	
	public void simularConsumo(){
		System.out.print("Simulando consumo... ");
		tm.simularConsumo();
		System.out.println("Hecho!");
	}
	
 	public static void main(java.lang.String[] args) {

		MainTelefoniaMovil main = new MainTelefoniaMovil();
		while(main.mostrarMenu()){}
		System.out.println("Gracias por usar el sistema.");
	}

}
